// Gravitation - Version D1-1.3

// Dieses Skript wendet eine Gravitationskraft auf Ebene 1 an. Die Ausgangsgeschwindigkeit
// entspricht der Geschwindigkeit am Anfang des Arbeitsbereiches.

//      EBENE                                   EIGENSCHAFT                        KANAL
//      -----                                   -------------                       ------
// 1: Veränderte Ebene						Wird nicht berücksichtigt       Wird nicht berücksichtigt
// 2: Wird nicht berücksichtigt				Wird nicht berücksichtigt       Wird nicht berücksichtigt

if (time() == start_time) {
	vel = tmap (time() + step_time, value(pop_layer(1), position)) -
           value(pop_layer(1), position);
	damping = 0.95;							    // Dämpfung (0 = unendlich groß, 1 = unendlich klein)
	grav = 0.9;								         // Gravitationskraft
	grav_dir = {0,1,0};						// Gravitationsrichtung
	accel = grav * grav_dir;	  // Gravitationsvektor

	new_pos = value(pop_layer(1), position);
} else {

	vel = vel*damping + accel;						// Geschwindigkeit beschleunigen
	new_pos = new_pos + vel;		         // Geschwindigkeit auf Position anwenden
	
	// Bei Erreichen des Kompositionsrandes abprallen
	if (new_pos[X] < 0) {
		new_pos[X] = 0;
		vel = {-vel[X], vel[Y]};
	}
	if (new_pos[Y] < 0) {
		new_pos[Y] = 0;
		vel = {vel[X], -vel[Y]};
	}
	if (new_pos[X] > comp_size[X]) {
		new_pos[X] = comp_size[X];
		vel = {-vel[X], vel[Y]};
	}
	if (new_pos[Y] > comp_size[Y]) {
		new_pos[Y] = comp_size[Y];
		vel = {vel[X], -vel[Y]};
	}	
}
value(pop_layer(1), position) = new_pos;
